home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagd_f.zip
/
DRIVES.SWG
/
0019_VOL-SER2.PAS.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-05-28
|
2KB
|
64 lines
{
>Who can give me the source code in TP 6.0 which reads a HardDisks Volume
>Serial Number ?
Starting With Dos 4 this inFormation can be GET/SET using inT 21h func 69h
Entry AH =69h
Al = 00h Get Serial number and Label
Al = 01h Set Serial number
BL = drive number 0=default, 1=A: .....)
DS:DX Pointer to a 24 Bytes Buffer (see below)
Return
Cf set on error
AX = error code (same as Int 21h AH = 59 )
CF Clear if Ok
if AL was 0 then Buffer is filled with
offset size Contents:
0 Word 0
2 DWord the disk Serial number
6 11 Bytes= volume Label or "NO NAME"
16 8 Bytes = 'FAT12' or 'FAT16'
The buffer is actually a copy of ByteS $27 to $3D of the Sector 0 of the disk
So With previous versions of Dos one should be able to do an Absolute read
of sector 0 from the disk and extract the Info from a buffer. I did not dare
doing it....
Last Thought: With Dos earlier than 4 , there was no disk serial number
so what the point looking For one .... !!!!
Although this info can be used to set one ???
(not by me... I need too badly my hard disk to
experiment With Int 13h ..... )
Here is a Program that Get these Infos...
I did not dare trying the Set Function (AL=1...) see above...
}
Program GetSerial;
Uses
Dos;
Var
Buffer : Array[0..23] of Byte;
R : Registers;
Serial : LongInt;
VLabel : String[11];
Fat : String[8];
begin
R.AH := $69;
R.AL := 0;
R.BL := 3; { C: Drive }
R.DS := Seg(Buffer);
R.DX := ofs(Buffer);
Intr($21,R);
if (R.Flags and Fcarry = 0) then
begin
Move(Buffer[2], Serial, Sizeof(LongInt));
Move(Buffer[6], VLabel[1], 11);
VLabel[0] := Char(11);
Move(Buffer[16], Fat[1], 8);
Fat[0] := Char(8);
end;
Writeln(VLabel);
Writeln(Fat);
readln;
end.